#include "luat_base.h"
#include "luat_mem.h"
#include "luat_multimedia.h"
#include "luat_mem.h"
#ifdef LUAT_BSP_NOT_SUPPORT_FLOAT


#else
#include "mp3_decode/minimp3.h"
LUAT_WEAK void *mp3_decoder_create(void)
{
	return luat_heap_malloc(sizeof(mp3dec_t));
}
LUAT_WEAK  void mp3_decoder_init(void *decoder)
{
	memset(decoder, 0, sizeof(mp3dec_t));
	mp3dec_init(decoder);
}
LUAT_WEAK void mp3_decoder_set_debug(void *decoder, uint8_t onoff)
{
	(void)decoder;
	(void)onoff;
}

LUAT_WEAK  int mp3_decoder_get_info(void *decoder, const uint8_t *input, uint32_t len, uint32_t *hz, uint8_t *channel)
{

	mp3dec_frame_info_t info;
	if (mp3dec_decode_frame(decoder, input, len, NULL, &info) > 0)
	{
		*hz = info.hz;
		*channel = info.channels;
		return 1;
	}
	else
	{
		return 0;
	}


}
LUAT_WEAK  int mp3_decoder_get_data(void *decoder, const uint8_t *input, uint32_t len, int16_t *pcm, uint32_t *out_len, uint32_t *hz, uint32_t *used)
{
	mp3dec_frame_info_t info;
	int result = mp3dec_decode_frame(decoder, input, len, pcm, &info);
	if (result >= 0) {
		*hz = info.hz;
		*out_len = (result * info.channels * 2);
		*used = info.frame_bytes;
	}
	else {
		*out_len = 0;
	}
	return result;
}
#endif
